APO 指标介绍
APO 采用 Prometheus 指标模式进行采集、存储和查询指标,指标实际存储在 VictoriaMetrics 中。
APO 产品使用的指标包含两大部分:自研指标与开源生态指标。
自研指标
APO 通过自研实现了以下指标:
下面分别对各指标进行描述。
接口粒度的请求次数、响应耗时和错误率
指标中包含了服务端处理请求的次数、响应耗时和错误情况(RED),指标名称如下:
- kindling_span_trace_duration_nanoseconds_count:接口粒度的请求总次数
- kindling_span_trace_duration_nanoseconds_sum:接口粒度的响应时间总和
- kindling_span_trace_duration_nanoseconds_bucket:接口粒度的响应耗时分布情况
该指标采用 VictoriaMetrics Histogram 数据类型存储,依据 Histogram 能够计算出请求的耗时分布情况。
指标标签说明
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
pid | 进程ID | 12345 | |
svc_name | 服务名称 | ts-station-service | |
content_key | 请求端点 | StationController#queryForIdBatch | |
is_error | 请求是否错误 | true/false | |
top_span | 是否是链路入口 | true/false | |
node_name | 应用所在主机名 | node-1 | |
container_id | 容器ID的前12位 | 2be6619c26c6 | 仅适用于容器环境 |
pod | Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
workload_kind | 工作负载类型 | Deployment | 仅适用于 Kubernetes 环境 |
workload_name | 工作负载名 | ts-station-service | 仅适用于 Kubernetes 环境 |
namespace | 命名空间 | default | 仅适用于 Kubernetes 环境 |
数据库请求次数、请求耗时和错误率
该指标从客户端进行统计,含义为某一个应用请求数据库的情况,指标名称如下:
- kindling_db_duration_nanoseconds_count:请求数据库的总次数
- kindling_db_duration_nanoseconds_sum:请求数据库的耗时总和
- kindling_db_duration_nanoseconds_bucket:请求数据库的耗时分布情况
该指标采用 VictoriaMetrics Histogram 数据类型存储,依据 Histogram 能够计算出请求的耗时分布情况。
指标标签说明
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
pid | 进程ID | 12345 | |
svc_name | 服务名称 | ts-station-service | |
name | 收敛后的执行语句 | SELECT ts.route | 格式:“操作名 表名” |
db_name | 数据库名称 | ts | |
db_system | 数据库类型名称 | mysql | |
is_error | 请求是否错误 | true/false | |
node_name | 应用所在主机名 | node-1 | |
container_id | 容器ID的前12位 | 2be6619c26c6 | 仅适用于容器环境 |
pod | Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
workload_kind | 工作负载类型 | Deployment | 仅适用于 Kubernetes 环境 |
workload_name | 工作负载名 | ts-station-service | 仅适用于 Kubernetes 环境 |
namespace | 命名空间 | default | 仅适用于 Kubernetes 环境 |
接口粒度的北极星因果指标
通过 eBPF 技术将服务端处理单次请求的耗时拆解为完备的资源耗时,包括:
- 在CPU上执行耗时
- kindling_profiling_cpu_duration_nanoseconds_count
- kindling_profiling_cpu_duration_nanoseconds_sum
- kindling_profiling_cpu_duration_nanoseconds_bucket
- 等待调度到CPU上耗时
- kindling_profiling_runq_duration_nanoseconds_count
- kindling_profiling_runq_duration_nanoseconds_sum
- kindling_profiling_runq_duration_nanoseconds_bucket
- 等待网络IO耗时
- kindling_profiling_net_duration_nanoseconds_count
- kindling_profiling_net_duration_nanoseconds_sum
- kindling_profiling_net_duration_nanoseconds_bucket
- kindling_profiling_epoll_duration_nanoseconds_count
- kindling_profiling_epoll_duration_nanoseconds_sum
- kindling_profiling_epoll_duration_nanoseconds_bucket
- 等待Futex耗时(例如等待锁耗时)
- kindling_profiling_futex_duration_nanoseconds_count
- kindling_profiling_futex_duration_nanoseconds_sum
- kindling_profiling_futex_duration_nanoseconds_bucket
- 等待文件IO耗时
- kindling_profiling_file_duration_nanoseconds_count
- kindling_profiling_file_duration_nanoseconds_sum
- kindling_profiling_file_duration_nanoseconds_bucket
- 等待其他资源耗时(多数情况为发生缺页导致的耗时)。
- kindling_profiling_other_duration_nanoseconds_count
- kindling_profiling_other_duration_nanoseconds_sum
- kindling_profiling_other_duration_nanoseconds_bucket
这些被拆解出的资源耗时指标被称为“北极星指标”。
北极星指标采用 VictoriaMetrics Histogram 数据类型存储,依据 Histogram 能够计算出请求的耗时分布情况。
在北极星指标中,每个指标都包含三个指标,后缀分别为:_count
、_sum
、_bucket
,含义解释:
- Count 指标含义解释:北极星指标的
_count
指标与服务端处理请求次数相同。 - Sum 指标含义解释:将在该资源上发生的耗时累计在一起。
- Bucket 指标含义解释:统计在某个区间内的请求次数。
指标标签说明
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
pid | 进程ID | 12345 | |
svc_name | 服务名称 | ts-station-service | |
content_key | 请求端点 | StationController#queryForIdBatch | |
is_error | 请求是否错误 | true/false | |
top_span | 是否是链路入口 | true/false | |
node_name | 应用所在主机名 | node-1 | |
container_id | 容器ID的前12位 | 2be6619c26c6 | 仅适用于容器环境 |
pod | Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
workload_kind | 工作负载类型 | Deployment | 仅适用于 Kubernetes 环境 |
workload_name | 工作负载名 | ts-station-service | 仅适用于 Kubernetes 环境 |
namespace | 命名空间 | default | 仅适用于 Kubernetes 环境 |
日志中错误数
- originx_logparser_exception_count_total:日志中出现 Exception 的日志总行数
- originx_logparser_level_count_total:按照日志级别统计的总行数
以上两个指标均为 Counter
类型。
指标标签说明
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
pid | 进程ID | 12345 | 仅适用于虚拟机进程 |
source_from | 日志来源 | stdout | |
host_ip | 应用所在主机的 IP 地址 | 192.168.1.6 | |
host_name | 应用所在主机名 | node-1 | |
container_id | 容器ID的前12位 | 2be6619c26c6 | 仅适用于容器环境 |
container_name | 容器名 | ts-station-service | 仅适用于容器环境 |
pod_name | Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
namespace | 命名空间 | default | 仅适用于 Kubernetes 环境 |
originx_logparser_exception_count_total
额外包含以下标签:
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
exception | 异常类型 | HttpClientErrorException |
originx_logparser_level_count_total
额外包含以下标签:
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
level | 日志级别 | ERROR |
应用间的网络 ping 延时
该指标的视角为发起 ping 一侧的应用。
- 指标名称:kindling_network_rtt
- 指标类型:Gauge
指标标签说明
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
pid | 进程ID | 12345 | |
node_name | 应用所在主机名 | node-1 | |
node_ip | 应用所在主机 IP | 192.168.1.6 | |
container_id | 容器ID的前12位 | 2be6619c26c6 | 仅适用于容器环境 |
pod | Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
workload_kind | 工作负载类型 | Deployment | 仅 适用于 Kubernetes 环境 |
workload_name | 工作负载名 | ts-station-service | 仅适用于 Kubernetes 环境 |
namespace | 应用所在命名空间 | default | 仅适用于 Kubernetes 环境 |
src_ip | 发起 ping 的 IP | 192.168.1.6 | |
src_pod | Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
src_node | 应用所在主机名 | node-1 | |
src_namespace | 应用所在命名空间 | default | 仅适用于 Kubernetes 环境 |
dst_ip | 被 ping 的 IP | 10.244.68.121 | |
dst_node | 被 ping 的应用所在主机名 | node-2 | |
dst_pod | 被 ping 的 Pod 名 | ts-station-service-d465b46c4-vxj2r | 仅适用于 Kubernetes 环境 |
dst_namespace | 被 ping 的应用所在命名空间 | default | 仅适用于 Kubernetes 环境 |
应用启动时间指标
该指标只在应用存活期间存在。
- 指标名称:originx_process_start_time
- 指标类型:Gauge
指标标签说明
名称 | 含义 | 示例 | 备注 |
---|---|---|---|
pid | 进程ID | 12345 | |
node_name | 应用所在主机名 | node-1 | |
node_ip | 应用所在主机 IP | 192.168.1.6 | |
container_id | 容器ID的前12位 | 2be6619c26c6 | 仅适用于容器环境 |
开源生态指标
APO 集成了 Grafana Alloy 作为指标采集器,该组件将常见的开源指标采集器进行了集成,支持通过配置开箱即用采集各类指标。
默认情况下,APO 开启了 Alloy 中以下组件采集指标:
- node-exporter:主机层面指标
- cadvisor:容器层面指标
- kubelet:Kubernetes 中 kubelet 指标
除此以外,可以通过配置采集各类中间件的指标。完整的可采集指标列表见 Grafana Alloy 文档。